//把getRequest导入进来
import {getRequest} from "./api"
import store from "../store";


//工具类方法

//定义一个菜单初始化的方法
//参数router:因为菜单格式化好后要加到router里面来，所以要把router对象给我
//store:这个数据我还要往store保存一份
export const initMenu = (router, store) => {
    console.info("initMenu......");
    if(store.state.routes.length > 0){  //注意这里是routes,没有“r"
        //如果有菜单数据就直接返回
        return;
    }
    //url: 请求接口  data：请求回来的数据
    getRequest("/system/config/menu").then(data =>{
        console.info("getRequest:"+data);
        if(data){

            //定义一个fmtRoutes 这是格式化之后的
            let fmtRoutes = fromatRoutes(data); //调用这个方法格式化
            //把router add 到 fmtRoutes 里面来
            router.addRoutes(fmtRoutes);
            //通过store.commit 第一个参数是方法的名称，第二个是格式化之后的fmtRoutes
            store.commit('initRoutes',fmtRoutes)
            // store.dispatch('connect');
        }
    })
    store.dispatch('connect');
}

export const fromatRoutes = (routes) => {
    //这是我一会要返回去的数据
    let fmRoutes = [];
    routes.forEach(router => {
        //这是一个批量的变量定义  eg: let path = router.path
        let {
            path,
            component,
            name,
            meta,
            iconcls,
            children
        } = router;

        //判断一个菜单是否有children并且是数组的形式
        if (children && children instanceof Array) {
            //递归调用给它进行格式化处理
            children = fromatRoutes(children);
        }
        //把变量赋值过来
        let fmRouter = {
            path: path,
            name: name,
            iconcls: iconcls,
            meta: meta,
            children: children,
            //要动态的去加载component 当成一个方法来处理，里面有一个参数交resolve
            component(resolve) {
                //注意：这里是startsWith，而不是startWith，有无“s”的区别
                if (component.startsWith("Home")) {
                    //这是ES5里面的写法  []:请求组件的地址
                    //这相当于导入组件，导入才能用该组件
                    require(['../views/' + component + '.vue'], resolve);
                } else if (component.startsWith("Emp")) {
                    require(['../views/emp/' + component + '.vue'], resolve);
                } else if (component.startsWith("Per")) {
                    require(['../views/per/' + component + '.vue'], resolve);
                } else if (component.startsWith("Sal")) {
                    require(['../views/sal/' + component + '.vue'], resolve);
                } else if (component.startsWith("Sta")) {
                    require(['../views/sta/' + component + '.vue'], resolve);
                } else if (component.startsWith("Sys")) {
                    require(['../views/sys/' + component + '.vue'], resolve);
                }
            }
        }
        //把定义好的组件赋值到fmRoutes这个在一开始就定义好的数组去
        fmRoutes.push(fmRouter); //注意“r”
    })
    return fmRoutes;
}